package cn.itcast.com.homework.day87;

import java.lang.reflect.Field;

/**
 * @author zhangshuai@Cskaoyan.onaliyun.com on 2020/4/1.
 * @version 1.0
 *
 *  设计一个方法，该方法，能修改任意对象中，指定成员变量的值
 *
 */
public class test1 {


    /**
     *
     * @param targetObj  要修改成员变量值的目标对象
     * @param fieldName  对象中要修改的成员变量的名字
     * @param newValue   要修改成员变量值的新值
     *
     *   field对象.set(obj, newValue)
     */
    public static void setAll(Object targetObj, String fieldName, Object newValue) throws NoSuchFieldException, IllegalAccessException {


        // 第一步，获取目标对象所属类型的，字节码文件对象 通过对象.getClass()
        Class aClass = targetObj.getClass();

        // 第二步，在获取到的Class对象中，指定名称的成员变量(Field对象)
        Field f = aClass.getDeclaredField(fieldName);

        // 不知道权限， setAccessible(true)，提前解决权限问题
        f.setAccessible(true);

        // 第三步，在指定对象上修改，指定成员变量的值 void set(Object obj, Object newValue)
        f.set(targetObj,newValue);
    }

}
